Banco de Dados

Aula 06 - SQL II: Manipulando e Consultando Dados




Helder Jefferson Ferreira da Luz

helder.luz@ifpr.edu.br

Objetivos da aula

  • Aprender a sublinguagem DML para manipulação de dados.
  • Conhecer a sublinguagem DQL para seleção de dados.

DML

Data Manipulation Language

INSERT UPDATE DELETE

DML: INSERT INTO

O comando INSERT INTO adiciona uma nova linha (registro) a uma tabela.

Sintaxe:

INSERT INTO nome_da_tabela (coluna1, coluna2, ...)
VALUES (valor1, valor2, ...);

Exemplo: Adicionando um cliente

INSERT INTO cliente (id, nome, email, cpf, data_nascimento)
VALUES (1, 'João da Silva', 'joao.silva@email.com', '11122233344', '1990-05-15');

Lembre-se: se o id for auto-incrementado, você não precisa (e não deve) incluí-lo no INSERT.

DML: UPDATE

O comando UPDATE modifica registros existentes em uma tabela.

Sintaxe:

UPDATE nome_da_tabela
SET coluna1 = valor1, coluna2 = valor2, ...
WHERE condicao;

AVISO: Se você esquecer a cláusula WHERE, TODOS os registros da tabela serão atualizados. Use com extremo cuidado!

Exemplo: Corrigindo o email de um cliente

UPDATE cliente
SET email = 'joao.silva.novo@email.com'
WHERE id = 1;

DML: DELETE FROM

O comando DELETE FROM remove registros de uma tabela.

Sintaxe:

DELETE FROM nome_da_tabela
WHERE condicao;

AVISO: Se você esquecer a cláusula WHERE, TODOS os registros da tabela serão apagados permanentemente.

Exemplo: Removendo um cliente

DELETE FROM cliente
WHERE id = 1;

O que acontece se esse cliente tiver pedidos? A FOREIGN KEY vai impedir a exclusão para manter a integridade!

DQL

Data Query Language

SELECT

DQL: A Arte de Perguntar com SELECT

SELECT é usado para consultar dados do banco.

Sintaxe básica:

SELECT coluna1, coluna2, ...
FROM nome_da_tabela;
  • Para selecionar todas as colunas, use o asterisco (*).

Exemplos:

-- Selecionar o nome e email de todos os clientes
SELECT nome, email FROM cliente;

-- Selecionar todas as informações de todos os produtos
SELECT * FROM produto;

Filtrando com WHERE

A cláusula WHERE filtra os registros, retornando apenas aqueles que satisfazem uma condição.

Operadores comuns:

  • =: Igual
  • != ou <>: Diferente
  • >, <, >=, <=: Maior, menor, etc.
  • LIKE: Busca por padrão de texto (com % como coringa).
  • IN: Verifica se o valor está em uma lista.
  • BETWEEN: Verifica se o valor está em um intervalo.
  • AND, OR, NOT: Para combinar condições.

WHERE - Exemplos

Buscar um produto específico:

SELECT * FROM produto WHERE nome = 'Laptop Super Potente';

Buscar produtos com preço acima de 500:

SELECT nome, preco FROM produto WHERE preco > 500;

Buscar clientes cujo nome começa com 'A':

SELECT nome FROM cliente WHERE nome LIKE 'A%';

Buscar pedidos feitos em 2025:

SELECT * FROM pedido WHERE data_pedido BETWEEN '2025-01-01' AND '2025-12-31';

Ordenando com ORDER BY

A cláusula ORDER BY ordena os resultados com base em uma ou mais colunas.

  • ASC: Ordem ascendente (padrão).
  • DESC: Ordem descendente.

Exemplos:

-- Listar produtos do mais barato para o mais caro
SELECT nome, preco FROM produto ORDER BY preco ASC;

-- Listar os clientes em ordem alfabética inversa
SELECT nome FROM cliente ORDER BY nome DESC;

-- Listar pedidos, do mais recente para o mais antigo
SELECT id, data_pedido FROM pedido ORDER BY data_pedido DESC;

Limitando com LIMIT

A cláusula LIMIT restringe o número de linhas retornadas pela consulta. É muito útil para paginação.

Exemplo: Top 5 produtos mais caros

SELECT nome, preco
FROM produto
ORDER BY preco DESC
LIMIT 5;

A sintaxe pode variar. No SQL Server, usa-se TOP 5 no início do SELECT.

Dúvidas? 🤔

Exercícios

Base de dados: Use os comandos INSERT para popular suas tabelas cliente, produto e pedido com pelo menos 5 registros em cada.

  1. Consulta Simples: Escreva uma consulta que retorne o nome e o preco de todos os produtos.
  2. Filtro por Preço: Escreva uma consulta que retorne apenas os produtos com preco menor que 100.
  3. Filtro por Texto: Escreva uma consulta que encontre todos os clientes cujo email termina com @email.com.
  4. Ordenação: Liste todos os pedidos, do mais antigo para o mais recente, mostrando o id do pedido e a data_pedido.

Exercícios

  1. Desafio (UPDATE e WHERE): O produto com id = 3 teve um aumento de 10%. Escreva o comando UPDATE para refletir isso no banco.
  2. Desafio (Consulta Combinada): Encontre o nome e o preço dos 3 produtos mais baratos que custam mais de R$ 50,00.

INSERTS

INSERT INTO cliente (nome, email, cpf, data_nascimento) VALUES
('Ana Santos', 'ana.santos@email.com', '11111111111', '1990-05-12'),
('Pedro Lima', 'pedro.lima@email.com', '22222222222', '1988-02-20'),
('Mariana Costa', 'mariana.costa@gmail.com', '33333333333', '1995-07-01'),
('Ricardo Alves', 'ricardo.alves@gmail.com', '44444444444', '1980-11-30'),
('Julia Rocha', 'julia.rocha@gmail.com', '55555555555', '1992-03-14'),
('Carlos Silva', 'carlos.silva@email.com', '66666666666', '1987-06-25'),
('Fernanda Souza', 'fernanda.souza@ymail.com', '77777777777', '1999-01-10'),
('Diego Martins', 'diego.martins@ymail.com', '88888888888', '1993-09-23'),
('Rafaela Vieira', 'rafaela.vieira@email.com', '99999999999', '1996-04-18'),
('Gustavo Dias', 'gustavo.dias@email.com', '10101010101', '1991-12-01'),
('Lucas Mendes', 'lucas.mendes@ymail.com', '12121212121', '1985-05-11'),
('Bruna Torres', 'bruna.torres@email.com', '13131313131', '1994-10-21'),
('Henrique Gomes', 'henrique.gomes@tmail.com', '14141414141', '1983-07-19'),
('Paula Araujo', 'paula.araujo@tmail.com', '15151515151', '1997-02-02'),
('Thiago Moreira', 'thiago.moreira@email.com', '16161616161', '1990-08-08'),
('Camila Nunes', 'camila.nunes@tmail.com', '17171717171', '1989-06-06'),
('Roberto Xavier', 'roberto.xavier@tmail.com', '18181818181', '1984-03-03'),
('Larissa Pinto', 'larissa.pinto@email.com', '19191919191', '1998-09-09'),
('Felipe Almeida', 'felipe.almeida@email.com', '20202020202', '1992-11-11'),
('Isabela Freitas', 'isabela.freitas@email.com', '21212121212', '1993-12-12');
INSERT INTO categoria (nome, descricao) VALUES
('Informática', 'Produtos de tecnologia'),
('Eletrônicos', 'Equipamentos eletrônicos em geral'),
('Livros', 'Livros diversos'),
('Móveis', 'Móveis residenciais e corporativos'),
('Eletrodomésticos', 'Equipamentos domésticos'),
('Escritório', 'Materiais de escritório'),
('Beleza', 'Produtos de higiene e beleza'),
('Esportes', 'Materiais esportivos'),
('Roupas', 'Vestuário masculino e feminino'),
('Calçados', 'Diversos tipos de calçados'),
('Brinquedos', 'Artigos infantis'),
('Automotivo', 'Produtos para carros'),
('Acessórios', 'Acessórios diversos'),
('Games', 'Jogos e consoles'),
('Perfumaria', 'Perfumes e cosméticos'),
('Papelaria', 'Materiais de papelaria'),
('Telefonia', 'Smartphones e acessórios'),
('Cozinha', 'Utensílios de cozinha'),
('Pet Shop', 'Produtos para animais'),
('Jardim', 'Itens para jardinagem');
INSERT INTO produto (nome, descricao, preco, id_categoria) VALUES
('Notebook Dell','Notebook 15 polegadas',3500.00,1),
('Mouse Logitech','Mouse sem fio',80.00,1),
('Smartphone Samsung','6GB RAM, 128GB',2200.00,17),
('Livro SQL Completo','Aprenda SQL do zero',59.90,3),
('Mesa de escritório','Mesa em madeira',450.00,4),
('Geladeira Consul','Aço inox 400L',2600.00,5),
('Cadeira Gamer','Acolchoada e reclinável',899.99,4),
('Perfume Dior','Eau de parfum 100ml',499.90,15),
('Tênis Nike','Corrida leve',350.00,10),
('Bicicleta Aro 29','Mountain bike',1200.00,8),
('Fone Bluetooth JBL','Cancelamento de ruído',320.00,2),
('Livro Java','Programação Java',79.90,3),
('Copo Térmico','Inox 500ml',50.00,18),
('Ração para cães','Pacote 10kg',120.00,19),
('Chuveiro Elétrico','220V turbo',89.90,5),
('Teclado Mecânico','Switch Blue',250.00,1),
('Monitor LG 24','Full HD',899.00,1),
('Caixa de Som','Bluetooth portátil',120.00,2),
('Luminária LED','Escritório',45.00,16),
('Livro Python','Full course Python',69.90,3);
INSERT INTO pedido (status, id_cliente) VALUES
('Pendente', 1),
('Pago', 2),
('Enviado', 3),
('Pendente', 4),
('Entregue', 5),
('Pendente', 6),
('Enviado', 7),
('Pago', 8),
('Entregue', 9),
('Pendente', 10),
('Pago', 11),
('Enviado', 12),
('Pendente', 13),
('Pago', 14),
('Entregue', 15),
('Enviado', 16),
('Pendente', 17),
('Pago', 18),
('Enviado', 19),
('Pendente', 20);
INSERT INTO item_pedido VALUES
(1,1,1,3500.00),
(2,2,2,80.00),
(3,3,1,2200.00),
(4,4,1,59.90),
(5,5,1,450.00),
(6,6,1,2600.00),
(7,7,1,899.99),
(8,8,1,499.90),
(9,9,2,350.00),
(10,10,1,1200.00),
(11,11,1,320.00),
(12,12,1,79.90),
(13,13,3,50.00),
(14,14,1,120.00),
(15,15,1,89.90),
(16,16,1,250.00),
(17,17,1,899.00),
(18,18,1,120.00),
(19,19,1,45.00),
(20,20,1,69.90);
INSERT INTO endereco_entrega VALUES
(1,'Rua A',100,'São Paulo','01000-000'),
(2,'Rua B',200,'Rio de Janeiro','20000-000'),
(3,'Rua C',150,'Belo Horizonte','30000-000'),
(4,'Rua D',300,'Curitiba','80000-000'),
(5,'Rua E',250,'Salvador','40000-000'),
(6,'Rua F',120,'Fortaleza','60000-000'),
(7,'Rua G',430,'Manaus','69000-000'),
(8,'Rua H',500,'Recife','50000-000'),
(9,'Rua I',320,'Porto Alegre','90000-000'),
(10,'Rua J',285,'Goiânia','74000-000'),
(11,'Rua K',168,'Florianópolis','88000-000'),
(12,'Rua L',87,'Campo Grande','79000-000'),
(13,'Rua M',765,'Maceió','57000-000'),
(14,'Rua N',455,'Natal','59000-000'),
(15,'Rua O',510,'Belém','66000-000'),
(16,'Rua P',302,'João Pessoa','58000-000'),
(17,'Rua Q',412,'Aracaju','49000-000'),
(18,'Rua R',98,'Vitória','29000-000'),
(19,'Rua S',125,'Teresina','64000-000'),
(20,'Rua T',741,'São Luís','65000-000');

- **Foco em DML (Data Manipulation Language)**: A linguagem para interagir com os dados. - `INSERT`: Adicionando novos registros. - `UPDATE`: Modificando registros existentes. - `DELETE`: Removendo registros. - **Foco em DQL (Data Query Language)**: A linguagem para fazer perguntas ao banco. - `SELECT`: O comando mais importante do SQL. - `FROM`: De qual tabela? - `WHERE`: Filtrando os resultados. - `ORDER BY`: Ordenando a saída. - `LIMIT`: Restringindo o número de resultados.

É o comando que você mais usará na sua vida com SQL.

SELECT nome, preco FROM produto; SELECT nome, preco FROM produto WHERE preco < 100; SELECT * FROM cliente WHERE email LIKE '%@email.com' SELECT id, data_pedido FROM pedido ORDER BY data_pedido DESC UPDATE produto SET preco = preco * 1.1 where id = 3 SELECT nome, preco FROM produto WHERE preco > 50 ORDER BY preco ASC LIMIT 3